package com.kcht.rfid.rd30.secretary;


import com.kcht.rfid.rd30.secretary.core.command.ReaderCommand;
import com.kcht.rfid.rd30.secretary.dispatch.Rd30Reader;

import java.util.HashMap;
import java.util.Map;
import java.util.Observer;

/**
 * 享元
 * */
public abstract class DeviceIntf {
    protected final Map<String, Rd30Reader> readerMap=new HashMap<>();
    /**
     * 初始化阅读器，即建链以及设置操作需要的参数，多次下发无用，需要先断开再下发
     * @param initParams 一些配置参数
     * @param observer 设备状态观察者
     *
     * */
    public  abstract void initReader(String readerIp, Map<String, String> initParams, Observer observer);

    /**
     * 断开阅读器连接
     * */
    public abstract void disconnectReader(String readerIp);

    /**
     * 下发命令
     * @param cmd 具体的命令
     * @param observers 多个观察者，用于命令结果的回调
     * */
    public abstract void dispatchReaderCommand(String readerIp, ReaderCommand cmd, Observer... observers);

    /**
     * 阅读器停止工作
     * */
    public abstract void stopReaderWork(String readerIp);
}